package com.zyl.blog.processing.model;

import com.alibaba.excel.read.listener.ReadListener;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;

/**
 * @version v1.0
 * @ProjectName: Personal_Blog_Server
 * @Package: com.zyl.blog.processing.model
 * @ClassName: ExcelReadConfig
 * @Description: Excel导入配置类
 * @Author FinalFantasy
 * @Date 2025/8/14-13:11
 */
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class ExcelReadConfig<T> {
    /**
     * 工作表编号（0开始）
     */
    private Integer sheetNo;

    /**
     * 工作表名称
     */
    private String sheetName;

    /**
     * 表头行数
     */
    private Integer headRowNumber = 1;

    /**
     * 批处理大小
     */
    private int batchSize = 100;

    /**
     * 数据验证函数
     * 返回null表示验证通过，否则返回错误信息
     */
    private Function<T, String> validator;

    /**
     * 批处理消费者
     * 每积累一定数量的数据（batchSize）就会调用一次
     */
    private Consumer<List<T>> batchConsumer;

    /**
     * 全局消费者
     * 所有数据解析完成后调用，参数为所有成功的数据
     */
    private Consumer<List<T>> globalConsumer;

    /**
     * 自定义监听器
     * 如果设置了自定义监听器，将忽略validator和batchConsumer
     */
    private ReadListener<T> customListener;
}

